#include <iostream>
using namespace std;
// 所有对于不同类型c++提供了很多性能优化手段
void foo(int a)
{
    // 1、值拷贝传递->于小型 POD 类型（如 int, double）是最高效且安全的方式；对于大对象才可能引发性能问题
    cout << "foo int &&a " << a << endl;
}
void foo(int *a)
{
    // 2、指针传递->可以避免拷贝，但需要手动管理生命周期，不当使用可能导致悬空指针或空指针解引用
    cout << "foo int *a " << a << endl;
}
void foo(int &a)
{
    // 3、对于左值传递引用-> 避免拷贝，同时允许修改原对象，适用于大对象或需要修改实参的场景
    cout << "foo int &&a " << a << endl;
}
void foo(int &&a)
{
    // 4、对于右值传递: 不浪费-右值总是“短命”的，或者说右值用完这一次就应该释放了
    // 右值引用用于绑定临时对象，支持移动语义，可以**“偷”资源而不是拷贝，从而提升性能
    cout << "foo int &&a " << a << endl;
}
int main()
{

    return 0;
}